<?php

/**
* Parser
*/
class Parser
{ 

  private $degres;
  private $types;
  private $pays;

  private $nbBiereEnregistree;
 
  function __construct($listes = array())
  {
     $this->degres = $listes["degres"];
     $this->types = $listes["types"];
     $this->pays = $listes["pays"];
     $this->nbBiereEnregistree = 0;
  }

  function getTypePage($url)
  {
      //create dom from url or file
      $html = file_get_html($url);

      foreach($html->find('.tableau tr td ul li a') as $typeUrl)
      {
         $this->getPageByType($typeUrl->href);
         $this->getAllTypePage($typeUrl->href);
      }
      
  }

  function getAllTypePage($url)
  {
      //create dom from url or file
      $html = file_get_html($url);

      foreach($html->find('.link a') as $key=> $nextPage)
      {
          //on ignore le premier élément (page suivante)
          if ($key==0)
          {
            $this->getPageByType("http://www.guidedesbieres.com/type/" . $nextPage->href);
          }
      }
  }

  function getPageByType( $url )
  {
      // Create DOM from URL or file
     $html = file_get_html($url);
      foreach($html->find('.tableau tr') as $tr) 
      {          
          $as = $tr->find('td a');
          if(isset($as[0]) && $as[0]->href)
          {
            $newUrl = "http://www.guidedesbieres.com/type/".$as[0]->href;
            $this->parseBeerPage($newUrl);
          }
      }
  }

  function parseBeerPage( $url )
  {
      


    // Create DOM from URL or file
    $html = file_get_html($url);

    $tmp = $html->find('.famille');
    $stringToAnalyse = $tmp[0]->plaintext;
    
    if(ereg("(Nom de la bière :)(.*)( Type : )(.*)( Fermentation : )(.*)( Alcool : )(.*)( Brasserie : )(.*)( Pays : )(.*)",$stringToAnalyse,$regs))
    {
       //récupération du lien de l'image principale
       $tmpImage = $html->find('.mainimage');
       $img = $tmpImage[0]->src;
       $imgLink = "http://www.guidedesbieres.com/type/".$img;
       
       //récupération de la description de la bière
       $descriptionP = $html->find('.description p');

       //Création d'un tableau d'attributs dans le but de créer un nouvel objet bière
       $attributs = array("nom" => ltrim(rtrim($regs[2])),
            "type" => TypeBiere::getByAttribute($this->types, "type", ltrim(rtrim($regs[4]))),
            "fermentation" => DegreFermentation::getByAttribute($this->degres, "degre", ltrim(rtrim($regs[6]))),
            "pays" => Pays::getByAttribute($this->pays, "title", ltrim(rtrim($regs[12]))),
            "alcool" =>  ltrim(rtrim($regs[8])),
            "brasserie" =>  ltrim(rtrim($regs[10])),
            // "pays" =>  ltrim(rtrim($regs[12])),
            "image" => $imgLink,
            "descriptif" =>  ltrim(rtrim($descriptionP[0]->plaintext)));

       if($attributs["fermentation"] == null)
         $attributs["fermentation"] = new DegreFermentation(array( "no" => 0, "degre" => ""));

       if($attributs["type"] == null)
         $attributs["type"] = new TypeBiere(array( "no" => 0, "type" => ""));

       if($attributs["pays"] == null)
         $attributs["pays"] = new Pays(array( "no" => 0, "title" => ""));
       
        //création de l'objet bière
        $biere = new Biere($attributs);

        try {
          // print_r($biere);
          //Enregistrement de la nouvelle bière dans un fichier xml.
          $biere->exportToFile("app/resources/biere.xml");
          $this->nbBiereEnregistree++;
          echo "Bières enregistrées : " . $this->nbBiereEnregistree . " <br />";
          flush();
        } catch (Exception $e) {
          print_r($e);
          print_r($biere);
        }

    }
  }



}

?>